//引入express模块
const express = require('express');
//引入pool连接池
const pool = require('../pool.js');
//创建服务器
const app = express();
//创建路由器对象
const r = express.Router();


/*1.添加注册路由结果*
 *   1.用户注册接口(post /reg)
 * 请求方式: post
 * 接口地址：http://127.0.0.1:8080/v1/users/reg
 */
//

r.post('/reg', (req, res, next) => {
    //1.1 获取请post求的数据
    let obj = req.body;
    console.log(obj);


    //1.2  验证各项数据是否为空
    if (!obj.uname) { //如果用户名为空
        res.send({ code: 401, msg: '用户名为空，请输入用户名' });
        return;
    }

    if (!obj.upwd) {
        res.send({ code: 402, msg: '密码为空，请输入密码' });
        return;
    }


    if (!obj.email) {
        res.send({ code: 403, msg: '邮箱为空，请输入您的邮箱' });
        return;
    }

    if (!obj.phone) {
        res.send({ code: 404, msg: '电话号码为空，请输入您的电话号码' })
        return;
    }
    //使用正则表达式验证手机号码格式
    //如果格式不符合
    if (!/^1[3-9]\d{9}$/.test(obj.phone)) {
        res.send({ code: 405, msg: '手机格式不正确' });
        return;
    }


    //1.3执行SQL命令
    pool.query('insert into xz_user set?', [obj], (err, result) => {
        if (err) {
            //如果有错误，抛给下一个中间件处理
            next(err);
            return;
        }
        console.log(result);
        //没有错误就响应成功
        res.send({ code: 200, msg: '注册成功' });
    });
});


/*2.添加用户登录路由接口* 在user.js中添加用户登录的接口（post  /login）获取post请求的数据
 * 请求方式：post
 * 接口地址：http://127.0.0.1:8080/v1/users/login
 *    验证数据是否为空，到数据库中查询用户名和密码同时匹配的数据（条件查询）
 *    如果有响应‘登录成功’，否则‘登录失败’
 * 
 */
r.post('/login', (req, res, next) => {
    //2.1获取post请求的数据
    let obj = req.body;
    console.log(obj);
    //2.2 验证各项数据是否为空
    if (!obj.uname) { //如果用户名为空
        res.send({ code: 401, msg: '用户名为空，请输入用户名' });
        return; //代替else
    }
    if (!obj.upwd) {
        res.send({ code: 402, msg: '密码为空，请输入密码' });
        return;
    }
    //2.3执行SQL命令
    pool.query('select * from xz_user where uname=? && upwd=?', [obj.uname, obj.upwd], (err, result) => {
        if (err) {
            next(err);
            return;
        }
        console.log(result);
        //成功的结果是数组，如果数组长度为0，说明登录失败，否则登录成功
        if (result.length === 0) {
            res.send({ code: 201, msg: '登陆失败' });
        } else {
            res.send({ code: 200, msg: '登陆成功' });
        }
    });

});



/**
 * 3.在user.js中添加修改用户的接口（put  /）,
 * 以body方式传递（uid,email,phone,user_name,gender）,判断各项数据是否为空，执行SQL命令
 * 
 * 请求方式：put
 * 接口地址：http://127.0.0.1:8080/v1/users/
 */
r.put('/', (req, res, next) => {
    //3.1获取put请求的数据
    let obj = req.body;
    console.log(obj);

    //3.2判断各项数据是否为空,遍历对象得到每个属性
    let i = 400; //初始化。保存状态码
    for (let k in obj) { //k代表属性名
        //console.log(k, obj[k]);
        //每次循环,i+1
        i++;
        //判断属性值是否为空，如果为空则提市该属性名不能为空
        if (!obj[k]) {
            res.send({ code: i, msg: k + '不能为空' });
            return;
        }
    }

    //3.3执行SQL命令
    pool.query('update xz_user set? where uid=?', [obj, obj.uid], (err, result) => {
        if (err) {
            next(err);
            return;
        }
        console.log(result);
        //结果是对象，判断对象下的affectedRows,结果是0说明修改失败，否则修改成功
        if (result.affectedRows === 0) {
            res.send({ code: 201, msg: '修改失败' });
        } else {
            res.send({ code: 200, msg: '修改成功' });
        }
    });
});



/**
 * 4.用户列表（get  /）,传递当前的页码和每页的数据量，进行分页查询，获取传递的数据req.query()
 * 最后响应{code:200,msg:'查询成功'，data:[]}
 * http://127.0.0.1:8080/v1/users?pno=1&count=5
 * 
 */
r.get('/', (req, res, next) => {
    //4.1获取get传递的数据
    let obj = req.query;
    console.log(obj);
    if (!obj.pno) obj.pno = 1;
    if (!obj.count) obj.count = 5;
    let start = parseInt(obj.pno - 1) * obj.count;
    let size = parseInt(obj.count);
    //4.2执行mysql命令
    pool.query('select uid,uname,email,phone from xz_user limit ?,?', [start, size], (err, result) => {
        if (err) {
            next(err);
            return;
        }
        console.log(result);
        if (result.length === 0) {
            res.send({ code: 201, msg: '信息查询失败' });
        } else {
            res.send({ code: 200, msg: '信息查询成功' });
        }
    });
});



/**
 * 5.删除用户(delete  /编号)
 * http://127.0.0.1:8080/v1/users/5
 * 
 */
r.delete('/:uid', (req, res, next) => {
    //5.1获取delete传递的数据
    let obj = req.params;
    console.log(obj);
    //5.2执行mysql语句
    pool.query('delete from xz_user where uid=?', [obj.uid], (err, result) => {
        if (err) {
            next(err);
            return;
        }
        console.log(result);
        if (result.affectedRows === 0) {
            res.send({ code: 201, msg: '数据删除失败' });
        } else {
            res.send({ code: 200, msg: '数据删除成功' });
        }
    });
});



/**
 * 6.查找用户(get  /编号)
 * http://127.0.0.1:8080/v1/users/5
 * 
 */
r.get('/:uid', (req, res, next) => {
    //6.1获取get请求的数据
    let obj = req.params;
    console.log(obj);
    //6.2 执行mysql命令
    pool.query('select * from xz_user where uid=?', [obj.uid], (err, result) => {
        if (err) {
            next(err);
            return;
        }
        console.log(result);
        if (result.length === 0) {
            res.send({ code: 201, msg: '数据查询失败,该用户不存在' });
        } else {
            res.send({ code: 200, msg: '用户数据数据查询成功', data: result });
        }
    });
});


//导出路由器对象
module.exports = r;